#include "widget.h"

#include <QPushButton>
#include <QDialog>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    resize(600, 480);

    QPushButton *btn1 = new QPushButton("测试模态对话框", this);
    btn1->move(100, 100);
    btn1->resize(300, 50);

    QPushButton *btn2 = new QPushButton("测试非模态对话框,栈对象", this);
    btn2->move(100, 200);
    btn2->resize(300, 50);

    QPushButton *btn3 = new QPushButton("测试非模态对话框,堆对象", this);
    btn3->move(100, 300);
    btn3->resize(300, 50);

    connect(btn1, &QPushButton::clicked, []{
        QDialog dlg;//dlg是栈对象
        dlg.exec();//阻塞在此处,创建的是模态对话框
        qDebug() << "在此处阻塞打印，创建模态对话框";
    });

    connect(btn2, &QPushButton::clicked, []{
        QDialog dlg;//dlg是栈对象
        dlg.show();//不阻塞在此处，创建的是非模态对话框,因为
                   //此处创建的对话框是栈对象，而栈对象离开
                   //作用域之后就销毁了，所以此处的对话框
                   //不能很好的显示出来
        qDebug() << "在此处直接打印，创建非模态对话框,是栈对象";
    });

    connect(btn3, &QPushButton::clicked, [=]{
        QDialog *pdlg = new QDialog(this);//pdlg是堆对象
        pdlg->resize(300, 300);
        pdlg->show();//不阻塞在此处，创建的是非模态对话框,因为
        //当对话框在关闭的时候会自动回收堆空间,可以防止内存泄漏
        pdlg->setAttribute(Qt::WA_DeleteOnClose);

        qDebug() << "在此处直接打印，创建非模态对话框,是堆对象";
    });
}

Widget::~Widget()
{
}

